﻿#ifndef MYAPP_H
#define MYAPP_H
#include <QCoreApplication>
#include <QEventLoop>
#include <QList>
#include <QMutex>
#include <QString>
#include <QTime>
#include <QtMessageHandler>

#define CONST_WIDTH 1920
#define CONST_HEIGHT 1080
#define WIDTH(w) (((w) * (myApp::DeskWidth)) / (CONST_WIDTH))
#define HEIGHT(h) (((h) * (myApp::DeskHeight)) / (CONST_HEIGHT))
#define TEST 0



#include <QTcpSocket>
class MyWebSocket;
typedef struct
{
    qint8   IPSetMode;  // IP地址设置方式 1：DHCP自动获取 2：手动设置
    QString IPAddr;     //
    QString mask;       //
} SystemParam;          // 系统参数

enum FILETYPE
{
    FILETYPE_REC = 0x0, // 录像文件
    FILETYPE_ALARM_JPG, // 报警图片
    FILETYPE_SNAP_JPG,  // 抓图
    FILETYPE_WAV,       // wav文件
};
typedef struct
{
    MyWebSocket *socket;
    int          chn;
    QString      url;
} WebSocketParam;

class myApp
{
public:

    static QString AppPath;            // 应用程序路径
    static int DeskWidth;              // 桌面宽度
    static int DeskHeight;             // 桌面高度
    static QRect Desk;
    static float Width_Scale;          // 宽度扩大、缩小比列
    static float Height_Scale;         // 高度扩大、缩小比列
    static QString AppTitle;           // 界面标题
    static QString DevType;            // 硬盘录像机厂家
    static QString AppStyle;           // 界面样式
    static int LogFileCount;           // 保留日志文件个数
    static QString CurrentLogFileName; // 当前日志文件名
    static QString httpserver;         // PLC IP地址
    static int httpport;               // PLC 端口号
    static int role;                   // 角色
    static int software_ver1;          // 软件版本1
    static int software_ver2;          // 软件版本2
    static QString localip;
    static QString FILEPATH;
    static int rectime;

    static QString websocketAddr;

    static QString current_chnnid;
    static QString current_devId;


    static void    ReadConfig();  // 读取配置文件
    static void    WriteConfig(); // 写入配置文件

    static void    init_param();

    static bool    GetNTPTime(QDateTime &dt,
                              QString    ntpHost);
    static qint64  GetMSecsTimeStamp();
    static QString GetFileName(enum FILETYPE type,
                               QString       camid);

    static QList<WebSocketParam>g_websocketlist;

    static QString ServerIP;          //服务器ip
    static QString DatabaseIP;        // 数据库ip
    static QString DatabaseName;      // 数据库名
    static  QString DatabaseUserName; // 数据库账号
    static  QString DatabasePassword; // 数据库密码
    static QString Current_user ;    //当前用户
    static QString Current_user_role; //当前用户角色

    static  QString AiCam_H;
    static  QString AiCam_L;
    static  QString Ai_ARM;
    static  QString Ai_GPU;
    static  QString Ai_FACE;
    static  QString Ai_DZFT;

    static QStringList ips;

    // 检查摄像机是否在线
    static bool IPCEnable(QString ipaddr)
    {
        QTcpSocket tcpClient;

        tcpClient.abort();
        tcpClient.connectToHost(ipaddr, 80);

        // 200毫秒没有连接上则判断该摄像机不在线
        bool ok = tcpClient.waitForConnected(200);

        return ok;
    }

    // 延时毫秒
    static void MSleep(int msec)
    {
        QTime dieTime = QTime::currentTime().addMSecs(msec);

        while (QTime::currentTime() < dieTime)
        {
            QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
        }
    }
};

void ManageLogFile();
void outputMessage(QtMsgType                 type,
                   const QMessageLogContext &context,
                   const QString            &msg);
#endif // MYAPP_H
